package com.xq.vo;

import lombok.Data;

import java.math.BigDecimal;


/**
 * 计算价格类
 */
public class Count {

    public static final BigDecimal DAY_PRICE= new BigDecimal("14");//白天起步价14

    public static final BigDecimal THREE_KM= new BigDecimal("3");//3公里

    public static final BigDecimal TEN_KM= new BigDecimal("10");//10公里

    public static final BigDecimal DAY_3_PRICE= new BigDecimal("2.5");//白天3公里后每公里2.5元

    public static final BigDecimal DAY_10_PRICE= new BigDecimal("3.5");//白天10公里后每公里3.5元

    public static final BigDecimal NIGHT_PRICE=new BigDecimal("18");//晚上起步价18

    public static final BigDecimal NIGHT_3_PRICE=new BigDecimal("3");//晚上起步价之后每公里3元

    public static final BigDecimal NIGHT_10_PRICE=new BigDecimal("4.7");//晚上10公里后每公里4.7元

    /**
     * 根据车计算价格
     * @param cart
     * @return
     */
    public static BigDecimal getPrice(Cart cart){
        System.out.println("当前车公里数："+ cart.getKmNum().toString());
       if(cart==null){
           throw new RuntimeException("车对象为空") ;
       }
        int dayOrNightFlag = cart.getDayOrNight();
       //如果是白天
        if(dayOrNightFlag==0){
            return getDayPrice(cart);
        }else {
            return getNightPrice(cart);
        }

    }

    /**
     * 获取白天得公里数
     * @param cart
     * @return
     */
    private static BigDecimal getDayPrice(Cart cart){
        if(cart==null){
            throw new RuntimeException("车对象为空") ;
        }
        //如果当前车公里数小于3公里
        if(cart.getKmNum().compareTo(THREE_KM)<0){
            return DAY_PRICE;
            //如果大于3公里小于10公里
        }else if(cart.getKmNum().compareTo(THREE_KM)>0 && cart.getKmNum().compareTo(TEN_KM)<0){
            //当前公里数减去3公里，然后乘以2.5元
            BigDecimal priceIn = DAY_PRICE;//3公里内
            BigDecimal priceOut = cart.getKmNum().subtract(THREE_KM).multiply(DAY_3_PRICE);//3公里外
            return priceIn.add(priceOut);
        }else if(cart.getKmNum().compareTo(TEN_KM)>0){
            BigDecimal priceIn = DAY_PRICE;//3公里内
            BigDecimal priceIn2 = cart.getKmNum().subtract(THREE_KM).multiply(DAY_3_PRICE);//3公里外,10公里内
            //当前公里数减去10公里，然后乘以3.5元
            BigDecimal priceOut = cart.getKmNum().subtract(TEN_KM).multiply(DAY_10_PRICE);
            return priceIn.add(priceIn2).add(priceOut);
        }else {
            return BigDecimal.ZERO;
        }
    }


    /**
     * 获取晚上得公里数
     * @param cart
     * @return
     */
    private static BigDecimal getNightPrice(Cart cart){
        if(cart==null){
            throw new RuntimeException("车对象为空") ;
        }
        //如果当前车公里数小于10公里
        if(cart.getKmNum().compareTo(TEN_KM)<0){
            return NIGHT_PRICE.multiply(cart.getKmNum());

        }else {
            //10公里前价格
            BigDecimal priceIn = NIGHT_PRICE.multiply(cart.getKmNum());
            //10公里后价格
            BigDecimal priceOut = cart.getKmNum().subtract(TEN_KM).multiply(NIGHT_10_PRICE);
            return priceIn.add(priceOut);
        }
    }

}
